//package com.plian.system.service.zzd.impl;
//
//import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
//import com.plian.Tools.CollectionUtil;
//import com.plian.Tools.DateUtil;
//import com.plian.Tools.StringUtil;
//import com.plian.system.dto.zzd.ZZDIndicatorsQuery;
//import com.plian.system.dto.zzd.ZZDQuery;
//import com.plian.system.entity.bi.*;
//import com.plian.system.entity.pm.property.PropertyBasics;
//import com.plian.system.entity.pm.propertytransaction.PropertyTransaction;
//import com.plian.system.entity.pm.publiclist.PublicList;
//import com.plian.system.entity.sys.Org;
//import com.plian.system.enumeratea.ZZDIndicatorsEnum;
//import com.plian.system.mapper.bi.*;
//import com.plian.system.mapper.pm.propertytransaction.PropertyTransactionMapper;
//import com.plian.system.service.fr.bulletin.IBulletinValueService;
//import com.plian.system.service.fr.bulletin.INewBulletinService;
//import com.plian.system.service.fr.indicatorsvalue.IIndicatorsReportService;
//import com.plian.system.service.pm.property.IPropertyBasicsService;
//import com.plian.system.service.pm.publiclist.IPublicListService;
//import com.plian.system.service.sys.orgzation.IOrgService;
//import com.plian.system.service.zzd.IZZDMixedReformService;
//import com.plian.system.service.zzd.IZZDPropertyService;
//import com.plian.system.vo.report.*;
//import com.plian.system.vo.zzd.finance.IndicatorsUnitDetailVO;
//import com.plian.system.vo.zzd.mixedReform.MixedFinishVO;
//import com.plian.system.vo.zzd.property.ListedPropertyVO;
//import com.plian.system.vo.zzd.property.PropertyCapitalVO;
//import com.plian.system.vo.zzd.property.PropertyTransactionVO;
//import com.plian.system.vo.zzd.sys.OverviewIndicatorsValueVO;
//import lombok.AllArgsConstructor;
//import lombok.extern.slf4j.Slf4j;
//import org.springframework.stereotype.Service;
//
//import java.math.BigDecimal;
//import java.math.RoundingMode;
//import java.util.*;
//import java.util.stream.Collectors;
//
///**
// * @Description: TODO
// * @Author: Take-off
// * @Date: 2023/3/15 2:55 PM
// * @Param
// * @return
// * @Version: 1.0
// **/
//@Slf4j
//@Service
//@AllArgsConstructor
//public class ZZDPropertyServiceImpl implements IZZDPropertyService {
//
//    private IPropertyBasicsService propertyBasicsService;
//
//    private IOrgService orgService;
//
//    private PropertyTransactionMapper propertyTransactionMapper;
//
//    private IPublicListService publicListService;
//
//    private IIndicatorsReportService indicatorsReportService;
//
//    private INewBulletinService newBulletinService;
//
//    private IBulletinValueService bulletinValueService;
//
//    private IZZDMixedReformService mixedReformService;
//
//    private CompanyMarketValueMapper companyMarketValueMapper;
//
//    private CompanyTypeMapper companyTypeMapper;
//
//    private CompanyFinanceMapper companyFinanceMapper;
//
//    private CompanyStokerightMapper companyStokerightMapper;
//
//    private CompanyCultivationMapper companyCultivationMapper;
//
//    //资产总额 code
//    private final String ZCZE = "125023";
//
//    //利润总额 code
//    private final String LRZE = "125020";
//
//    //营业收入 code
//    private final String YYZSR = "125001";
//
//    @Override
//    public List<PropertyCapitalVO> getPropertyTypeTotal(ZZDQuery query){
//        List<PropertyCapitalVO> propertyCapitalVOS = new ArrayList<>();
//        //组织Id
//        List<String> orgIds = new ArrayList<>();
//        if (query.getOrgType() == 1){
//            //全大市
//            orgIds = orgService.getAllOrg().stream().map(Org::getId).collect(Collectors.toList());
//        }else {
//            //监管企业
//            orgIds = orgService.getGzwUnits(orgService.getDTFlag(query.getReportTime())).stream().map(Org::getId).collect(Collectors.toList());
//        }
//        //产权组织
//        Date reportDate = DateUtil.parse(query.getReportTime(), DateUtil.PATTERN_MONTH);
//        List<PropertyBasics> propertyList = propertyBasicsService.getAllChildByOrgIdsAndTime(orgIds, DateUtil.format(DateUtil.plusMonths(reportDate,1), DateUtil.PATTERN_DATE));
//        return getPropertyCapital(propertyList);
//    }
//
//    @Override
//    public OverviewIndicatorsValueVO getOverviewPropertyType(ZZDIndicatorsQuery query) {
//        OverviewIndicatorsValueVO overviewIndicatorsValueVO =  OverviewIndicatorsValueVO.builder().indicatorsName(
//                Objects.requireNonNull(ZZDIndicatorsEnum.getByColumnName(query.getColumnName())).getIndicatorsName()
//        ).build();
//        List<Org> orgs = new ArrayList<>();
//        if (query.getOrgType() == 1){
//            //全大市
//            orgs = orgService.getAllOrg();
//        }else {
//            //监管企业
//            orgs = orgService.getGzwUnits(orgService.getDTFlag(query.getReportTime()));
//        }
//        //产权组织
//        Date reportDate = DateUtil.parse(query.getReportTime(), DateUtil.PATTERN_MONTH);
//        List<PropertyBasics> propertyList = propertyBasicsService.getAllChildByOrgIdsAndTime(orgs.stream().map(Org::getId).collect(Collectors.toList()),
//                DateUtil.format(DateUtil.plusMonths(reportDate,1), DateUtil.PATTERN_DATE));
//        overviewIndicatorsValueVO.setIndicatorsValue(new BigDecimal(
//                propertyList.stream()
//                        .filter(m -> Optional.ofNullable(m.getOrgCategory()).isPresent() && query.getColumnCode().equals(m.getOrgCategory())).count()
//                )
//        );
//        //获取集团
//        List<PropertyBasics> funds = propertyList.stream().filter(m -> Optional.ofNullable(m.getIsStateFunded()).isPresent() && "1".equals(m.getIsStateFunded())).collect(Collectors.toList());
//        if (CollectionUtil.isNotEmpty(funds)){
//            List<IndicatorsUnitDetailVO> indicatorsUnitDetailVOS = new ArrayList<>();
//            for (PropertyBasics fund: funds) {
//                //获取组织
//                orgs.stream().filter(m -> m.getId().equals(fund.getOrgId())).findFirst().ifPresent(org ->{
//                    String propertyCode = fund.getPropertyCode();
//                    //集团下子类
//                    List<PropertyBasics> child = propertyList.stream().filter(m -> m.getPropertyCode().length() > propertyCode.length() && m.getPropertyCode().substring(0, propertyCode.length() - 1).equals(propertyCode))
//                            .collect(Collectors.toList());
//                    if (CollectionUtil.isNotEmpty(child)){
//                        IndicatorsUnitDetailVO indicatorsUnitDetailVO = IndicatorsUnitDetailVO.builder().unitId(org.getId()).unitName(org.getName()).value(
//                                new BigDecimal(
//                                        child.stream()
//                                                .filter(m -> Optional.ofNullable(m.getOrgCategory()).isPresent() && query.getColumnCode().equals(m.getOrgCategory())).count())
//                        ).orderNum(org.getOrderNum()).build();
//                        indicatorsUnitDetailVOS.add(indicatorsUnitDetailVO);
//                    }
//                });
//            }
//            overviewIndicatorsValueVO.setUnitDetailList(indicatorsUnitDetailVOS);
//        }
//        return overviewIndicatorsValueVO;
//    }
//
//    @Override
//    public List<PropertyCapitalVO> getPropertyCapitalTotal(Integer proType,String date){
//        if (StringUtil.isBlank(date)){
//            date = minDate();
//        }
//        List<PropertyBasics> propertyList = getProByType(proType,date);
//        return getPropertyCapital(propertyList);
//    }
//
//    @Override
//    public List<PieValueVO> getPropertyOrder(Integer proType,String date){
//        if (StringUtil.isBlank(date)){
//            date = minDate();
//        }
//        List<PieValueVO> pieValueVOS = new ArrayList<>();
//        List<PropertyBasics> propertyList = getProByType(proType,date);
//        if (CollectionUtil.isNotEmpty(propertyList)){
//            Map<String, List<PropertyBasics>> mapByOrgGradation = propertyList.stream().filter(m -> Optional.ofNullable(m.getOrgGradation()).isPresent()).collect(Collectors.groupingBy(PropertyBasics::getOrgGradation));
//            pieValueVOS.add(PieValueVO.builder().name("一级").value(CollectionUtil.isNotEmpty(mapByOrgGradation.get("001001")) ? mapByOrgGradation.get("001001").size() :0 ).build());
//            pieValueVOS.add(PieValueVO.builder().name("二级").value(CollectionUtil.isNotEmpty(mapByOrgGradation.get("001002")) ? mapByOrgGradation.get("001002").size() :0 ).build());
//            pieValueVOS.add(PieValueVO.builder().name("三级").value(CollectionUtil.isNotEmpty(mapByOrgGradation.get("001003")) ? mapByOrgGradation.get("001003").size() :0 ).build());
//            int count = propertyList.size() - mapByOrgGradation.get("001001").size() - mapByOrgGradation.get("001002").size() - mapByOrgGradation.get("001003").size();
//            pieValueVOS.add(PieValueVO.builder().name("四级及以下").value(count).build());
//        }
//        return pieValueVOS;
//
//    }
//
//    @Override
//    public ListedPropertyVO getListedPropertyVO(String date){
//        if (StringUtil.isBlank(date)){
//            date = minDate();
//        }
//        ListedPropertyVO listedPropertyVO = new ListedPropertyVO();
//        //资产证券化 ：资产证券化率=（控股上市公司净资产+宁波港折股净资产+重要参股上市公司（持股5%及以上）折股净资产）/（监管企业净资产+省海港集团折股净资产）
//        List<CompanyStokeright> companyStokerights = companyStokerightMapper.selectList(null);
//        if (CollectionUtil.isNotEmpty(companyStokerights)){
//            Map<String, List<CompanyStokeright>> mapByTime = companyStokerights.stream().collect(Collectors.groupingBy(m -> m.getYear() + "_" + m.getMonth()));
//            List<CompanyStokeright> stokerights = mapByTime.get(mapByTime.keySet().stream().max(Comparator.naturalOrder()).get());
//            //控股上市公司净资产
//            BigDecimal netAssets = stokerights.stream().filter(m -> "控股".equals(m.getType()) && !"宁波港".equals(m.getShortName())).map(m -> new BigDecimal(m.getNetAssets())).reduce(BigDecimal.ZERO, BigDecimal::add);
//            //宁波港折股净资产
//            BigDecimal nbAssets = stokerights.stream().filter(m ->"宁波港".equals(m.getShortName())).map(m -> new BigDecimal(m.getFoldNetAssets())).reduce(BigDecimal.ZERO, BigDecimal::add);
//            //重要参股上市公司折股净资产
//            BigDecimal foldNetAssets = stokerights.stream().filter(m -> "参股".equals(m.getType())).map(m -> new BigDecimal(m.getFoldNetAssets())).reduce(BigDecimal.ZERO, BigDecimal::add);
//            //监管企业净资产 + 省海港集团折股净资产
//            BigDecimal specialNet = stokerights.stream().filter(m -> "监管企业净资产 ".equals(m.getShortName()) ||  "省海港集团".equals(m.getShortName())).map(m -> new BigDecimal(m.getFoldNetAssets())).reduce(BigDecimal.ZERO, BigDecimal::add);
//            BigDecimal assetSecuritizationRate = ((netAssets.add(nbAssets).add(foldNetAssets)).multiply(new BigDecimal(100))).divide(specialNet, 2, RoundingMode.HALF_UP);
//            listedPropertyVO.setAssetSecuritizationRate(assetSecuritizationRate);
//
//            //控股上市公司
//            long hold = stokerights.stream().filter(m -> "控股".equals(m.getType()) && !"宁波港".equals(m.getShortName())).count();
//            listedPropertyVO.setHoldingListedCompany((int)hold);
//            //重要参股上市公司
//            long important = stokerights.stream().filter(m -> "参股".equals(m.getType())).count();
//            listedPropertyVO.setImportantListedCompany((int)important);
//
//            //重点培育
//            List<CompanyCultivation> companyCultivations = companyCultivationMapper.selectList(null);
//            listedPropertyVO.setCultivateListedCompany(companyCultivations.size());
//        }
//        return listedPropertyVO;
//    }
//
//    @Override
//    public PropertyTransactionVO getPropertyTransfer(String date){
//        if (StringUtil.isBlank(date)){
//            date = minDate();
//        }
//        PropertyTransactionVO transactionVO = PropertyTransactionVO.builder().transactionsNumber(0).transactionsPrice(BigDecimal.ZERO).premiumRate(BigDecimal.ZERO).build();
//
//        List<PropertyTransaction> propertyTransactions = propertyTransactionMapper.selectList(new LambdaQueryWrapper<PropertyTransaction>().eq(PropertyTransaction::getStatus, 3));
//        if (CollectionUtil.isNotEmpty(propertyTransactions)){
//            transactionVO.setTransactionsNumber(propertyTransactions.size());
//
//            List<PublicList> publicLists = publicListService.list(new LambdaQueryWrapper<PublicList>().in(PublicList::getPropertyTransactionId,
//                    propertyTransactions.stream().map(PropertyTransaction::getId).collect(Collectors.toList())));
//            if (CollectionUtil.isNotEmpty(publicLists)){
//                //挂牌价格
//                BigDecimal listingPrice = publicLists.stream().filter(m -> Optional.ofNullable(m.getListingPrice()).isPresent()).map(m -> new BigDecimal(m.getListingPrice())).reduce(BigDecimal.ZERO, BigDecimal::add);
//
//                //成交价格
//                BigDecimal dealPrice = publicLists.stream().map(PublicList::getDealPrice).filter(m -> Optional.ofNullable(m).isPresent()).reduce(BigDecimal.ZERO, BigDecimal::add);
//                if (dealPrice.compareTo(BigDecimal.ZERO)>0){
//                    transactionVO.setTransactionsPrice(dealPrice.divide(new BigDecimal("10000"),2, RoundingMode.HALF_DOWN));
//                }
//
//                if (listingPrice.compareTo(BigDecimal.ZERO)>0){
//                    BigDecimal divide = dealPrice.multiply(new BigDecimal("100")).divide(listingPrice, 2, RoundingMode.HALF_UP);
//                    transactionVO.setPremiumRate(divide);
//                }
//            }
//        }
//        return transactionVO;
//    }
//
//    @Override
//    public List<MixedFinishVO> getKeyPointOrg(String date,Integer type){
//        if (StringUtil.isBlank(date)){
//            date = minDate();
//        }
//        List<MixedFinishVO> mixedFinishVOS = new ArrayList<>();
//        //所有组织
//        List<Org> orgList = orgService.list(new LambdaQueryWrapper<Org>().ne(Org::getIsDel,1));
//        List<String> parentIds = orgList.stream().map(Org::getParentId).collect(Collectors.toList());
//
//        List<String> keyPointIds = new ArrayList<>();
//        List<String> orgNames = new ArrayList<>();
//        if (type == 1){
//            // 获取重点培育企业
//            List<CompanyCultivation> keyPointOrgs = companyCultivationMapper.selectList(null);
//            if (CollectionUtil.isNotEmpty(keyPointOrgs)){
//                orgNames = keyPointOrgs.stream().map(CompanyCultivation::getOrgName).collect(Collectors.toList());
//                for (Org org:orgList){
//                    if (orgNames.contains(org.getName())){
//                        keyPointIds.add(org.getId());
//                    }
//                }
//            }
//        }else if (type == 2){
//            // 控股上市
//            List<CompanyStokeright> companyStokerights = companyStokerightMapper.selectList(null);
//            Map<String, List<CompanyStokeright>> mapByTime = companyStokerights.stream().collect(Collectors.groupingBy(m -> m.getYear() + "_" + m.getMonth()));
//            List<CompanyStokeright> stokerights = mapByTime.get(mapByTime.keySet().stream().max(Comparator.naturalOrder()).get());
//            orgNames = stokerights.stream().filter(m -> "控股".equals(m.getType()) && !"宁波港".equals(m.getShortName())).map(CompanyStokeright::getCompanyName).collect(Collectors.toList());
//            for (Org org:orgList){
//                if (orgNames.contains(org.getName())){
//                    keyPointIds.add(org.getId());
//                }
//            }
//        }else if (type == 3){
//            // 参股上市
//            List<CompanyStokeright> companyStokerights = companyStokerightMapper.selectList(null);
//            Map<String, List<CompanyStokeright>> mapByTime = companyStokerights.stream().collect(Collectors.groupingBy(m -> m.getYear() + "_" + m.getMonth()));
//            List<CompanyStokeright> stokerights = mapByTime.get(mapByTime.keySet().stream().max(Comparator.naturalOrder()).get());
//            orgNames = stokerights.stream().filter(m -> "参股".equals(m.getType())).map(CompanyStokeright::getCompanyName).collect(Collectors.toList());
//            for (Org org:orgList){
//                if (orgNames.contains(org.getName())){
//                    keyPointIds.add(org.getId());
//                }
//            }
//        }
//
//        if (CollectionUtil.isNotEmpty(keyPointIds)){
//            List<IndicatorsUnitDetailVO> indicatorsUnitDetails = indicatorsReportService.getAllNetAssets(keyPointIds.stream().filter(parentIds::contains).collect(Collectors.toList()),
//                    keyPointIds.stream().filter(m -> !parentIds.contains(m)).collect(Collectors.toList()),
//                    date);
//            for (String orgName:orgNames){
//                MixedFinishVO mixedFinishVO = new MixedFinishVO();
//                Optional<IndicatorsUnitDetailVO> detailVOOptional = indicatorsUnitDetails.stream().filter(m -> orgName.equals(m.getUnitAllName())).findFirst();
//                if (detailVOOptional.isPresent()){
//                    IndicatorsUnitDetailVO unitDetail = detailVOOptional.get();
//                    BigDecimal value = unitDetail.getValue();
//                    mixedFinishVO = MixedFinishVO.builder().orgId(unitDetail.getUnitId()).orgName(unitDetail.getUnitName()).netAssetRate(value).build();
//                }else {
//                    mixedFinishVO = MixedFinishVO.builder().orgName(orgName).netAssetRate(BigDecimal.ZERO).build();
//
//                }
//                if (Optional.ofNullable(mixedFinishVO.getTotalAssets()).isPresent()){
//                    mixedFinishVO.setTotalAssets(mixedFinishVO.getTotalAssets().divide(new BigDecimal("10000"),2,RoundingMode.HALF_UP));
//                }
//                if (Optional.ofNullable(mixedFinishVO.getTotalProfit()).isPresent()){
//                    mixedFinishVO.setTotalProfit(mixedFinishVO.getTotalProfit().divide(new BigDecimal("10000"),2,RoundingMode.HALF_UP));
//                }
//                if (Optional.ofNullable(mixedFinishVO.getBusinessIncome()).isPresent()){
//                    mixedFinishVO.setBusinessIncome(mixedFinishVO.getBusinessIncome().divide(new BigDecimal("10000"),2,RoundingMode.HALF_UP));
//                }
//                mixedFinishVOS.add(mixedFinishVO);
//            }
//            //计算快报值
//            mixedReformService.setFinishValue(date,mixedFinishVOS);
//        }
//
//        return mixedFinishVOS;
//
//    }
//
//    @Override
//    public ChartsVO getCompanyMarketValue(Integer proType,String date){
//        if (StringUtil.isBlank(date)){
//            date = minDate();
//        }
//        List<String> legend = new ArrayList<>();
//        legend.add("上市公司市值");
//        LegendVO legendVO = LegendVO.builder().data(legend).build();
//        List<XAxisVO> xAxisVOS = new ArrayList<>();
//        List<SeriesVO> series = new ArrayList<>();
//        List<CompanyType> companyTypes = companyTypeMapper.selectList(new LambdaQueryWrapper<CompanyType>().notLike(CompanyType::getProType, proType).or()
//                .isNull(CompanyType::getProType));
//        if (CollectionUtil.isNotEmpty(companyTypes)){
//            List<CompanyMarketValue> companyMarketValues = companyMarketValueMapper.selectList(new LambdaQueryWrapper<CompanyMarketValue>()
//                    .eq(CompanyMarketValue::getYear, DateUtil.format(new Date(), DateUtil.PATTERN_YEAR))
//                    .in(CompanyMarketValue::getCompanyName, companyTypes.stream().map(CompanyType::getShortName).collect(Collectors.toList())));
//            if (CollectionUtil.isNotEmpty(companyMarketValues)){
//                List<String> data = new ArrayList<>();
//                companyMarketValues.stream().map(CompanyMarketValue::getMonth).distinct().sorted().forEach(m -> {
//                    data.add(m.toString());
//                });
//                xAxisVOS.add(XAxisVO.builder().data(data).build());
//                Map<String, List<CompanyMarketValue>> mapByName = companyMarketValues.stream().collect(Collectors.groupingBy(CompanyMarketValue::getCompanyName));
//                for (String companyName:mapByName.keySet()){
//                    List<CompanyMarketValue> values = mapByName.get(companyName);
//                    List<Object> value = new ArrayList<>();
//                    for (String month:data){
//                        Optional<CompanyMarketValue> first = values.stream().filter(m -> m.getMonth().equals(Integer.valueOf(month))).findFirst();
//                        if (first.isPresent()){
//                            value.add(first.get().getMarketValue());
//                        }else {
//                            value.add(0);
//                        }
//                    }
//                    series.add(SeriesVO.builder().type("line").name(companyName).data(value).build());
//                }
//            }
//        }
//        ChartsVO chartsVO = ChartsVO.builder().legend(legendVO).xAxis(xAxisVOS).series(series).build();
//        return chartsVO;
//    }
//
//    /**
//     * @Description: //TODO 获取产权-全大市/市本级
//     * @Author: Take-off
//     * @Date: 1:56 PM 2023/3/17
//     * @Param: [proType]
//     * @return: java.util.List<com.plian.system.entity.pm.property.PropertyBasics>
//     **/
//    private List<PropertyBasics> getProByType(Integer proType,String date){
//        if (StringUtil.isBlank(date)){
//            date = minDate();
//        }
//        List<PropertyBasics> propertyList = new ArrayList<>();
//        if (proType == 1){
//            propertyList = propertyBasicsService.getMunicipalProperty(false,date);
//        }else {
//            propertyList = propertyBasicsService.getMunicipalProperty(true,date);
//        }
//        return propertyList;
//    }
//
//    /**
//     * @Description: //TODO 获取产权类别个数
//     * @Author: Take-off
//     * @Date: 1:51 PM 2023/3/17
//     * @Param: [propertyList]
//     * @return: java.util.List<com.plian.system.vo.zzd.PropertyCapitalVO>
//     **/
//    private List<PropertyCapitalVO> getPropertyCapital(List<PropertyBasics> propertyList){
//        List<PropertyCapitalVO> propertyCapitalVOS = new ArrayList<>();
//        PropertyCapitalVO wholly = PropertyCapitalVO.builder().key("wholly").orgCategoryName("全资").regCapital("0").build();
//        PropertyCapitalVO share = PropertyCapitalVO.builder().key("share").orgCategoryName("参股").regCapital("0").build();
//        PropertyCapitalVO absolute = PropertyCapitalVO.builder().key("absolute").orgCategoryName("绝对控股").regCapital("0").build();
//        PropertyCapitalVO actual = PropertyCapitalVO.builder().key("actual").orgCategoryName("实际控股").regCapital("0").build();
//        if (CollectionUtil.isNotEmpty(propertyList)){
//            wholly.setQuantity((int)propertyList.stream()
//                    .filter(m -> Optional.ofNullable(m.getOrgCategory()).isPresent() && "045001".equals(m.getOrgCategory())).count());
//
//            share.setQuantity( (int)propertyList.stream()
//                    .filter(m -> Optional.ofNullable(m.getOrgCategory()).isPresent() && "045004".equals(m.getOrgCategory())).count());
//
//            absolute.setQuantity( (int)propertyList.stream()
//                    .filter(m -> Optional.ofNullable(m.getOrgCategory()).isPresent() && "045002".equals(m.getOrgCategory())).count());
//
//            actual.setQuantity(  (int)propertyList.stream()
//                    .filter(m -> Optional.ofNullable(m.getOrgCategory()).isPresent() && "045003".equals(m.getOrgCategory())).count());
//        }
//        propertyCapitalVOS.add(wholly);
//        propertyCapitalVOS.add(share);
//        propertyCapitalVOS.add(absolute);
//        propertyCapitalVOS.add(actual);
//        return propertyCapitalVOS;
//    }
//
//    private String minDate(){
//        //15号是2月前，15号后是1月前
//        return DateUtil.format(DateUtil.minusMonths(DateUtil.parse(DateUtil.format(DateUtil.now(),DateUtil.PATTERN_MONTH),DateUtil.PATTERN_MONTH),2),DateUtil.PATTERN_MONTH);
//    }
//}
